﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Windows.Forms;
using BadgeManager.Controller;
using BadgeManager.Model;

namespace Badge_Manager.View
{
    public partial class frmAggiungiDocenti : Form
    {
        frmAggiungiAlunni frmAlunni;
        Attivita attività;
        StatoForm stato;
        DataTable tableDocenti = new DataTable();
        DataTable tableDocentiInseriti = new DataTable();
        List<Docente> DocentiInseriti = new List<Docente>();
        List<Docente> DocentiCancellati = new List<Docente>();
        List<Docente> DocentiDisponibili;
        ctrlPersona ctrlPersona = new ctrlPersona();
        ctrlDocenze cDocenze = new ctrlDocenze();

        public frmAggiungiDocenti(Attivita attività, frmAggiungiAlunni frmAlunni, StatoForm stato)
        {
            InitializeComponent();
            this.attività = attività;
            this.frmAlunni = frmAlunni;
            this.stato = stato;
            SettaColonne();
        }

        #region Tabelle e DataGrid

        private void SettaColonne()
        {
            tableDocenti.Columns.Add("Id", typeof(Guid));
            tableDocenti.Columns.Add("Nome", typeof(string));
            tableDocenti.Columns.Add("Cognome", typeof(string));

            tableDocentiInseriti.Columns.Add("Id", typeof(Guid));
            tableDocentiInseriti.Columns.Add("Nome", typeof(string));
            tableDocentiInseriti.Columns.Add("Cognome", typeof(string));
        }

        private void AggiornaTabellaDocentiInseriti()
        {
            throw new NotImplementedException();
        }

        private void AggiornaTabellaDocenti()
        {
            throw new NotImplementedException();
        }

        #endregion Tabelle e DataGrid

        private void btnAggiungi_Click(object sender, EventArgs e)
        {
            if (gridDocenti.SelectedRows.Count > 0)
            {
                for (int i = 0; i < gridDocenti.SelectedRows.Count; i++)
                {
                    if (gridDocenti.Columns["id"] != null)
                    {
                        Docente docente = ctrlPersona.GetDocenteById(
                            (Guid)gridDocenti.SelectedRows[i].Cells["id"].Value);
                        DocentiInseriti.Add(docente);
                        foreach (Docente a in DocentiInseriti) // ricerca e cancellazione
                        {
                            if (a.Id == docente.Id)
                            {
                                DocentiDisponibili.Remove(a);
                                break;
                            }
                        }
                        tableDocenti.Rows.Add(docente.Id, docente.Nome, docente.Cognome);
                    }
                }
            }
        }

        private void btnRimuovi_Click(object sender, EventArgs e)
        {
            if (gridDocentiInseriti.SelectedRows.Count > 0)
            {
                for (int i = 0; i < gridDocentiInseriti.SelectedRows.Count; i++)
                {
                    if (gridDocentiInseriti.Columns["id"] != null)
                    {
                        Docente docente = ctrlPersona.GetDocenteById(
                            (Guid)gridDocentiInseriti.SelectedRows[i].Cells["id"].Value);
                        DocentiCancellati.Add(docente);
                        DocentiDisponibili.Add(docente);
                        foreach (Docente a in DocentiInseriti) // ricerca e cancellazione
                        {
                            if (a.Id == docente.Id)
                            {
                                DocentiInseriti.Remove(a);
                                break;
                            }
                        }
                    }
                }
            }
        }

        private void btnSalva_Click(object sender, EventArgs e)
        {
            if (stato == StatoForm.Modifica)
            {
                foreach (Persona a in DocentiCancellati)
                {
                    ctrlPersona.setPersonaToAttivitaNULL(this.attività, a.Id);
                }
            }
            else
            {
                attività = (Attivita)cmbCorsi.SelectedItem;
            }
            foreach (Persona a in DocentiInseriti)
            {
                if (cDocenze.IsDocente(a) == false)
                {
                    ctrlPersona.InserisciPersonaInDocente(a);
                }
                else
                {
                    if (cDocenze.DocenteAssociatoAdAttivitaInCorso((Docente)a)
                        == ctrlDocenze.DocenteAssociato.si) // controlla se il docente è già presente in un corso Attivo
                        MessageBox.Show("Il Docente " + a.Cognome + " " + a.Nome + @" insegna già in un altro.
                                        \n Inserire di nuovo i Docenti");
                    return;
                }
                Docenze docenza = new Docenze();
                docenza.Docente = (Docente)a;
                docenza.Attivita = this.attività;
            }
            MessageBox.Show("Docenti Inseriti Correttamente!", "Informazione", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void CambiaStato(StatoForm stato)
        {
            switch (stato)
            {
                case StatoForm.Nuovo:
                    this.Text += " [Nuovo]";
                    DocentiDisponibili = cDocenze.SelezionaDocentiNonImpegnati();
                    AggiornaTabellaDocenti();
                    break;
                case StatoForm.Modifica:
                    this.Text += " [Modifica]";
                    DocentiInseriti = cDocenze.SelezionaDocentiImpegnati(this.attività);
                    AggiornaTabellaDocenti();
                    AggiornaTabellaDocentiInseriti();
                    break;
            }
        }
    }
}